//axios拦截器用例

//导入vue实例
import vueContext from '@/main.js'

/*
参考文章：
https://www.jianshu.com/p/646ed4edf51f
https://www.jianshu.com/p/a0c67f4e145e
https://www.cnblogs.com/xbzhu/p/11810384.html
*/


export function setInterceptor(axiosInstance){

/*
注意：
config可以通过config.headers的方式获取和设置method、url、params、data等所有的属性。
方式1：config.headers.authtoken = 'xxx'。
方式2: config.headers['authtoken'] = 'xxx'。
*/

    //设置请求拦截器
    axiosInstance.interceptors.request.use(
        config=>{
            //每次发送都token带上放入headers里
            config.headers['head_test_token'] = 'sixsixsix';
            return config; //记得务必要返回
        },
        error=>{ //错误处理可以不写
            //do some things here
            return Promise.reject(error); //记得务必要返回
        }
    )

    //设置响应拦截器
    axiosInstance.interceptors.response.use(
        response=>{ //注意，只有状态码为200的响应才会进入这里。
            //do some things here
            return response; //记得务必要返回
            /*
            也可以用如下方式让请求接口直接进入到catch代码块里。
            return Promise.reject('出错了哦');

            Promise.reject(reason)方法也会返回一个新的 Promise 实例，该实例的状态为rejected
            参考文章：https://blog.csdn.net/ixygj197875/article/details/79188195
            */
        },
        error=>{ //注意，非200状态码的响应都会进入这里

            if(error.response.status){
                switch(error.response.status){
                    //401 未登录
                    case 401:
                        vueContext.$router.push({path:'/login'});
                        break;

                    //403 token过期
                    case 403:
                        vueContext.$router.push({path:'/login'});
                        break;

                    //404 请求url不存在
                    case 404:
                        console.log('访问的url不存在，404啦!!!');
                        vueContext.$message({
                            message:'访问的url不存在，404啦!!!',
                            type:'error',
                            showClose:true,
                            offset:80
                        });
                        break;

                    //500 服务器错误
                    case 500:
                        break;
                }
            }

            return Promise.reject(error.response); //记得务必要返回
        }
    )
}
